1.ABC三个柱子,小的不能在大的上面。从A移到C.
//分析一下可知,每一次想要将一个大盘子从A移到C,就必须先把上面的小盘子从A移到B,最后再把B的盘子移到C,这样就是一个递归的过程。
#include <iostream>
using namespace std;
int num=0;
void hanio(int a,int b,int c,int n){
if(n<1) return;
hanio(a,c,b,n-1);
num++;
hanio(b,a,c,n-1);
}
int main()
{
int n;
cin>>n;num=0;
hanio(1,2,3,n);
cout<<num<<endl;
return 0;
}
当然,直接输出规律也行,答案就是1<<n-1;
2.4个柱子
/*
多了一根柱子而已,但是一看就懵了啊...
是这样的,从A到D的话,设有m个盘子从A到B步数为f[m],那么剩下的n个盘子就服从三个柱子的汉诺塔问题了。最后再从B到D,也是同样的步数。
所以对于n取min(f[m]*2+(1<<(n-m))-1);
*/
#include <iostream>
using namespace std;
long long f[101];
in